// 通过key 去查找文件
/* 

private.wxa617e37ebd951173.key 例如key文件下面的微信id为  wxa617e37ebd951173 ，
那就会去打包的文件目录下面找 project.config.json 里的微信id 为 wxa617e37ebd951173，
找到了就会去会拿这个key文件去执行上传文件
*/
var path = require("path");
var fs = require("fs");
//找到的key文件 和文件目录
let keyArr = [];
//找到的主要打包文件 和文件目录
let buildArr = [];
async function init (path){
    getFiles(path.keyFileListPath,keyArr,iskeyFile);
    getFiles(path.buildFileListPath,buildArr,isbuildFile);
    if (keyArr.length && buildArr.length) {
      await findBuilFileWxId(buildArr);
      return cliProject(fileterGroup());
    }else{
        console.log('key文件或带上传文件没有找到');
        return [];
    };
};

//组装cli项目对象
function cliProject(stayUploadInfo){
    console.log(stayUploadInfo[0].buildFile,'stayUploadInfo');
    let arr = [];
    let buildFileMap = stayUploadInfo.map(item => {
        return {
         buildFileKeyPath:item.filePath,
         buildFile:item.buildFile,
        }
    });
    buildFileMap.forEach(item =>{
        item.buildFile.forEach(buildFileItem =>{
            let parmas = {
                type: 'miniProgram',
                ignores: ['node_modules/**/*'],
            }
            parmas.appid = buildFileItem.wxid;
            parmas.projectPath = buildFileItem.fileSuperior;
            parmas.privateKeyPath = item.buildFileKeyPath;
            if (parmas.appid) {
                arr.push(parmas);
            }
        });
    });
    return arr;
}

//开始keyArr 和 buildArr 对比到正确的位置，力求对应的打包文件到对应key文件目录下
function fileterGroup (){
   keyArr.forEach((keyItem,keyIndex) =>{
       keyItem.buildFile = [];
       buildArr.forEach((buildItem,buildKey) =>{
           if (keyItem.fileName.includes(buildItem.wxid)) {
               keyItem.buildFile.push(buildItem);
           }
       })
   });
   return keyArr;
}

//读取已找到的打包文件的微信id
async function findBuilFileWxId(buildFileArr){
    let length = buildFileArr.length;
    let i = 0;
    while (i < length) {
        let reslut = await readFile(buildFileArr[i].filePath);
        buildFileArr[i].wxid = JSON.parse(reslut.data).appid;
        i++;
    }
}
//查找有多少 个key文件
function getFiles (dir, arr = [],isCb,superior){
    files_ = arr;
    var files = fs.readdirSync(dir);
    for (var i in files){
        var name = dir + '/' + files[i];
        if (fs.statSync(name).isDirectory()){
            getFiles(name, files_,isCb,name);
        } else {
            if (isCb(name)) {
                files_.push({
                fileName:files[i],//当前文件名
                filePath:name,//当前文件路径
                fileSuperior:superior|| ''//当前文件夹
            });
            }
        }
    }
    return files_;
}
//判断key文件
function iskeyFile (fileName){
    if (typeof fileName == "string" && path.extname(fileName) == ".key") return true
}

//判断微信 打包文件
function isbuildFile (fileName,files){
    if (typeof fileName == "string"  && fileName.includes('project.config.json') &&  fileName.includes('weixin')) return true;
}

//读取文件
function readFile(filePath){
    return new Promise((resolve,reject) =>{
        fs.readFile(filePath, "utf-8", function(error, data) {
            if (error) return reject({code:1,msg:'读取文件失败'});
            else resolve({code:0,data:data})
          });
    })
}


module.exports = init;